/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package nadesicoi

import groovy.sql.*
import javax.swing.*
import java.awt.*

/**
 *
 * @author Usuario
 */
class Consola {
    static def consolaForm = null
    static def data

    static def lanzar() {
        try {
            consolaForm = new ConsolaForm();
            consolaForm.setVisible(true)

            def index   = { consolaForm.listaSucesos.getSelectedIndex() }
            consolaForm.btnDetallesError.actionPerformed = { lanzarDetallesSuceso(data[index()]) }
            consolaForm.btnEliminar.actionPerformed = {
                def DB = HSQLDB.conectar(); DB.execute("DELETE FROM sucesos WHERE id = ?", [data[index()].ID]); DB.close()
                JOptionPane.showMessageDialog(null, "Suceso eliminado"); poblarSucesos() }

            consolaForm.btnEliminarTodos.actionPerformed = {
                def DB = HSQLDB.conectar(); DB.execute("DELETE FROM sucesos"); DB.commit(); DB.close()
                JOptionPane.showMessageDialog(null, "Todos los sucesos eliminados"); poblarSucesos() }

            consolaForm.btnAcercaDe.actionPerformed = { JOptionPane.showMessageDialog(null, "Servidor Phesus Nadesico I. \nDerechos Reservados Phesus (C) 2009.\n\nNadeshiko: Rodeado de claveles rosas.") }
            consolaForm.btnRegenerarBD.actionPerformed = {
                if(JOptionPane.showConfirmDialog(null, "Se eliminará el contenido de la BD ¿está seguro?") == JOptionPane.YES_OPTION) { HSQLDB.generarEsquema();
                    poblarSucesos();
                    JOptionPane.showMessageDialog(null, "Base de datos interna generada/regenerada")} }
            consolaForm.btnImportadorMicrosip.actionPerformed = {
                if(javax.swing.JOptionPane.showInputDialog("Clave")=="gato") {
                    Thread.start {
                        ImportadorMicrosip.start()
                    }
                }
            }
            poblarSucesos()

        } catch(e) { error("Excepción en consola", e) }
    }
    static def poblarSucesos() {
        def db      = HSQLDB.conectar()
        data        = db.rows("select * from sucesos order by momento DESC limit 50")
        def tam     = db.firstRow("select count(id) as nsucesos from sucesos")
        def datList = []
        data.each { datList << "${it.momento} - ${it.mensaje}" }

        consolaForm.lblNSucesos.text = "Mostrando últimos ${data.size()} sucesos de ${tam.nsucesos}"
        consolaForm.listaSucesos.setListData (datList.toArray())
        //consolaForm.listaSucesos.scrollRectToVisible(new Rectangle(0, consolaForm.listaSucesos.height-10, 10, 10))
        db.close()
    }
    static def lanzarDetallesSuceso(data) {
        def formSuceso = new ConsolaDetalles()
        formSuceso.txtMomento.text = data.momento
        formSuceso.txtMensaje.text = data.mensaje
        formSuceso.txtDetalles.text= data.detalles
        formSuceso.btnAceptar.actionPerformed = { formSuceso.dispose() }

        formSuceso.setVisible(true)
        formSuceso
    }
    static def sucesoAbstracto(msg, tipo, detalles) {
        def db = HSQLDB.conectar()

        db.execute("INSERT INTO sucesos (mensaje, tipo, detalles) VALUES (?,?,?)", [msg, tipo, detalles])
        db.close()
        poblarSucesos()        
    }
    static def estatus(msg) { consolaForm.lblEstatus.text = msg }
    static def suceso(msg, detalles) { sucesoAbstracto(msg, "Suceso", detalles) }

    static def aviso(msg, detalles="") { sucesoAbstracto(msg, "Aviso", detalles) }

    static def error(msg, detalles) {
        if(!(detalles instanceof String)) { detalles = getStackTraceString(detalles) }
        sucesoAbstracto(msg, "Error", detalles)
    }
    def static String getStackTraceString(java.lang.Exception exc) {
        String salida = exc.toString() + "\n";
        java.lang.StackTraceElement[] elementos = exc.getStackTrace();
        for(int i = 0; i < elementos.length; i++)
        {
            salida += elementos[i].toString() + " at \n" ;
        }
        return salida;
    }
}

